`:top
`!PL/SQL`! (`F33f`_`[sigle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Sigle]`_`f de `*`!Procedural Language / Structured Query Language`!`*) est un `F33f`_`[langage`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f fondé sur les paradigmes de programmation `F33f`_`[procédurale`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_procédurale]`_`f et `F33f`_`[structurée`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_structurée]`_`f. Il est `F33f`_`[propriétaire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logiciel_propriétaire]`_`f, créé par `F33f`_`[Oracle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Oracle_Database]`_`f et utilisé dans le cadre de `F33f`_`[bases de données relationnelles`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_de_données_relationnelle]`_`f. Sa syntaxe générale ressemble à celle des `F33f`_`[langages`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f `F33f`_`[Pascal`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Pascal_(langage)]`_`f et `F33f`_`[Ada`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Ada_(langage)]`_`f.
PL/SQL est disponible dans Oracle Database (depuis la version 7), TimesTen In-Memory Database (depuis la version 11.2.1) et `F33f`_`[IBM DB2`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=IBM_DB2]`_`f (depuis la version 9.7).
Il permet de combiner des requêtes `F33f`_`[SQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Structured_Query_Language]`_`f et des instructions procédurales (boucles, conditions...), dans le but de créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur), comme des `F33f`_`[procédures stockées`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Procédure_stockée]`_`f ou des `F33f`_`[déclencheurs`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Déclencheur]`_`f.
Les dernières évolutions proposées par Oracle reposent sur un moteur permettant de créer et gérer des `F33f`_`[objets`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_orientée_objet]`_`f contenant des méthodes et des propriétés.
À l'origine, PL/SQL est un `F33f`_`[langage interprété`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_interprété]`_`f, mais depuis la version 9i RC1, le code peut être compilé en `F33f`_`[code machine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_machine]`_`f`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f]. Dans la version 9i d'Oracle database, le code est converti en `F33f`_`[C`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=C_(langage)]`_`f puis doit être compilé en `F33f`_`[bibliothèques partagées`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Bibliothèque_logicielle]`_`f (`F33f`_`[DLL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Dynamic_Link_Library]`_`f sous Windows) ; dans la version 10g le code machine est stocké dans le catalogue`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f] et depuis la version 11g il est stocké dans le `F33f`_`[tablespace`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Tablespace]`_`f système après compilation directe`:cite-ref-3[`F5bf`_`[3`#cite-note-3]`_`f].
>>Contents
• `F0af`_`[Comparaison avec les autres bases de données`#comparaison-avec-les-autres-bases-de-donn-es]`_`f
• `F0af`_`[Concepts`#concepts]`_`f
• `F0af`_`[Blocs`#blocs]`_`f
• `F0af`_`[Structure du code`#structure-du-code]`_`f
• `F0af`_`[Variables`#variables]`_`f
• `F0af`_`[Notes et références`#notes-et-r-f-rences]`_`f
• `F0af`_`[Articles connexes`#articles-connexes]`_`f
• `F0af`_`[Liens externes`#liens-externes]`_`f
-─
>>Comparaison avec les autres bases de données
`F33f`_`[MySQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=MySQL]`_`f et Mimer SQL proposent un langage analogue dans le principe mais plus limité, le SQL/PSM de la norme SQL:2003, et plusieurs `F33f`_`[SGBD`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=SGBD]`_`f en utilisent un dérivé (IBM DB2 avec SQL-PL, `F33f`_`[PostgreSQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PostgreSQL]`_`f avec `F33f`_`[PL/pgSQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PL/pgSQL]`_`f et PL/pgPSM). Quant à `F33f`_`[Microsoft`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft]`_`f et `F33f`_`[Sybase`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Sybase]`_`f, ils utilisent un concurrent développé par `F33f`_`[Sybase`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Sybase]`_`f, le `F33f`_`[Transact-SQL (T-SQL)`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=T-SQL]`_`f.
>>Concepts
>>>Blocs
Tout programme PL/SQL doit se présenter sous forme de blocs. Voici la forme générale d'un bloc.
`B100`F9d9<<label>> -- Optionnel`f`b
`B100`F9d9DECLARE -- Section optionnelle`f`b
`B100`F9d9déclarations`f`b
`B100`F9d9BEGIN -- Section obligatoire, doit contenir au moins une instruction exécutable`f`b
`B100`F9d9implémentation`f`b
`B100`F9d9EXCEPTION -- Section optionnelle`f`b
`B100`F9d9gestion des exceptions`f`b
`B100`F9d9END;`f`b
Un bloc PL/SQL comprend d'abord une partie dédiée à la définition de toutes les variables employées dans le bloc. Elle commence par l'instruction `*DECLARE`* et est facultative. La section principale commence avec l'instruction `*BEGIN`*. Elle contient les instructions du programme. Si une variable est utilisée dans cette section alors qu'elle n'a pas été déclarée dans la section de déclaration, le `F33f`_`[compilateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f générera une erreur. Enfin, la dernière section est appelée en cas d'erreur dans la section précédente. Elle commence par l'instruction `*EXCEPTION`* et on y traite l'ensemble des exceptions levées dans la section principale.
>>>Structure du code
PL/SQL permet de grouper les instructions dans des `F33f`_`[procédures`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Procédure_(informatique)]`_`f et des `F33f`_`[fonctions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Fonction_(informatique)]`_`f, ces termes ont la même signification qu'en `F33f`_`[Pascal`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Pascal_(langage)]`_`f : une `!fonction`! est un bloc de code prenant des paramètres et qui effectue des traitements pour obtenir un résultat retourné, une `!procédure`! recouvre la même notion sauf qu'une procédure ne retourne pas de résultat. Les `F33f`_`[arguments`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Paramètre_(programmation_informatique)]`_`f passés aux procédures et fonctions peuvent être donnés en lecture seule (`*IN`*), en écriture (`*OUT`*) ou en lecture-écriture (`*IN OUT`*) ; le développeur peut également choisir le passage par valeur (comportement normal) ou par référence (`*NO COPY`*).
Des fonctions et procédures peuvent être regroupées dans des unités nommées `!paquetages`!, elles sont alors accessibles sous le même espace de noms. D'une manière similaire aux modules de Pascal, la création d'un paquetage requiert l'écriture d'une spécification exposant le prototype des fonctions et procédures du paquetage, ainsi que des variables et `F33f`_`[types`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Type_(informatique)]`_`f publics. En second lieu, l'implémentation du paquetage est faite séparément ; elle contient le code des procédures et fonctions ainsi que la déclaration d'éléments privés.
La version 8i a introduit le concept d'`F33f`_`[objet`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Objet_(informatique)]`_`f et les implémentations depuis la version 9i supportent la `F33f`_`[programmation orientée-objet`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_orientée_objet]`_`f avec notamment l'`F33f`_`[héritage`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Héritage_(informatique)]`_`f. Une `F33f`_`[classe`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Classe_(informatique)]`_`f PL/SQL est décrite comme un type. Elle a une structure analogue à celle d'un package PL/SQL : d'abord la déclaration des méthodes, ensuite leur implémentation dans le `*body`*.
>>>Variables
Les premiers types de variables à disposition sont les types SQL supportés par le serveur Oracle (`*INTEGER`*, `*VARCHAR`*...), mais il est possible de définir des types personnalisés.
>>Notes et références
`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f http://www.dbspecialists.com/files/presentations/native_plsql.html « Copie archivée » (version du 22 juillet 2018 sur `*`F33f`_`[Internet Archive`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Internet_Archive]`_`f`*)
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f (en) « Plsql New in 11gr1 », sur Scribd (consulté le 24 septembre 2020).
`:cite-note-3`!3.`! `F0af`_`[↑`#cite-ref-3]`_`f (en) « July 2011 – TwelveC », sur TwelveC (consulté le 22 mars 2023).
>>>Articles connexes
• `F33f`_`[Base de données relationnelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_de_données_relationnelle]`_`f
• `F33f`_`[Système de gestion de base de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_de_gestion_de_base_de_données]`_`f
• `F33f`_`[Structured Query Language`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Structured_Query_Language]`_`f
• `F33f`_`[PL/pgSQL (PostgreSQL)`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PL/pgSQL]`_`f
• `F33f`_`[Transact-SQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Transact-SQL]`_`f
>>>Liens externes
• (en) PL/SQL User's Guide and Reference
• Portail des bases de données
`c`F0af`_`[↑ Back to top`#top]`_`f`a